From: Dan Winship Date: Tue, 18 May 2010 17:14:38 +0000 (-0400) Subject: [panel] split out a PanelBaseMenuItem class X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~10070 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=320adb316d6ea23d671d4e427b563520cfe15e14;p=gnome-shell.git [panel] split out a PanelBaseMenuItem class Make the existing PanelMenuItem, PanelSeparatorMenuItem, PanelImageMenuItem inherit from it. https://bugzilla.gnome.org/show_bug.cgi?id=619008 --- diff --git a/js/ui/panel.js b/js/ui/panel.js index 5047f60de..05c58ef25 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -126,40 +126,61 @@ TextShadower.prototype = { } }; -function PanelMenuItem(text) { - this._init(text); +function PanelBaseMenuItem(reactive) { + this._init(reactive); } -PanelMenuItem.prototype = { - _init: function (text) { +PanelBaseMenuItem.prototype = { + _init: function (reactive) { this.actor = new St.Bin({ style_class: 'panel-menu-item', - reactive: true, - track_hover: true, + reactive: reactive, + track_hover: reactive, x_fill: true, y_fill: true, x_align: St.Align.START }); - this.label = new St.Label({ text: text }); - this.actor.set_child(this.label); - this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) { - this.emit('activate', event); - })); + + if (reactive) { + this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) { + this.emit('activate', event); + })); + } } }; -Signals.addSignalMethods(PanelMenuItem.prototype); +Signals.addSignalMethods(PanelBaseMenuItem.prototype); -function PanelSeparatorMenuItem(text) { +function PanelMenuItem(text) { this._init(text); } -PanelSeparatorMenuItem.prototype = { +PanelMenuItem.prototype = { + __proto__: PanelBaseMenuItem.prototype, + _init: function (text) { - this.actor = new St.DrawingArea({ style_class: 'panel-separator-menu-item' }); - this.actor.connect('repaint', Lang.bind(this, this._onRepaint)); + PanelBaseMenuItem.prototype._init.call(this, true); + + this.label = new St.Label({ text: text }); + this.actor.set_child(this.label); + }, +}; + +function PanelSeparatorMenuItem() { + this._init(); +} + +PanelSeparatorMenuItem.prototype = { + __proto__: PanelBaseMenuItem.prototype, + + _init: function () { + PanelBaseMenuItem.prototype._init.call(this, false); + + this._drawingArea = new St.DrawingArea({ style_class: 'panel-separator-menu-item' }); + this.actor.set_child(this._drawingArea); + this._drawingArea.connect('repaint', Lang.bind(this, this._onRepaint)); }, _onRepaint: function(area) { let cr = area.get_context(); - let themeNode = this.actor.get_theme_node(); + let themeNode = area.get_theme_node(); let [width, height] = area.get_surface_size(); let found, margin, gradientHeight; [found, margin] = themeNode.get_length('-margin-horizontal', false); @@ -180,7 +201,6 @@ PanelSeparatorMenuItem.prototype = { cr.fill(); } }; -Signals.addSignalMethods(PanelSeparatorMenuItem.prototype); function PanelImageMenuItem(text, iconName, alwaysShowImage) { this._init(text, iconName, alwaysShowImage); @@ -191,25 +211,27 @@ function PanelImageMenuItem(text, iconName, alwaysShowImage) { var _gtkImageMenuItemCreated = false; PanelImageMenuItem.prototype = { + __proto__: PanelBaseMenuItem.prototype, + _init: function (text, iconName, alwaysShowImage) { + PanelBaseMenuItem.prototype._init.call(this, true); if (!_gtkImageMenuItemCreated) { let menuItem = new Gtk.ImageMenuItem(); menuItem.destroy(); _gtkImageMenuItemCreated = true; } + this._alwaysShowImage = alwaysShowImage; - this.actor = new St.BoxLayout({ style_class: 'panel-menu-item panel-image-menu-item', - reactive: true, - track_hover: true }); this._iconName = iconName; this._size = 16; + + let box = new St.BoxLayout({ style_class: 'panel-image-menu-item' }); + this.actor.set_child(box); this._imageBin = new St.Bin({ width: this._size, height: this._size }); - this.actor.add(this._imageBin, { y_fill: false }); - this.actor.add(new St.Label({ text: text }), { expand: true }); - this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) { - this.emit('activate', event); - })); + box.add(this._imageBin, { y_fill: false }); + box.add(new St.Label({ text: text }), { expand: true }); + if (!alwaysShowImage) { let settings = Gtk.Settings.get_default(); settings.connect('notify::gtk-menu-images', Lang.bind(this, this._onMenuImagesChanged)); @@ -234,7 +256,6 @@ PanelImageMenuItem.prototype = { } } }; -Signals.addSignalMethods(PanelImageMenuItem.prototype); function PanelMenu(sourceButton) { this._init(sourceButton);